ML-Agents:让机器学习训练加速7倍
在ML-Agents v0.9和v0.10版本中,我们加入了异步环境、GAIL生成性对抗式模仿学习和SAC柔性行动者评论家模型等一系列功能来让机器学习训练加速。
通过与合作伙伴JamCity进行合作,我们在泡泡射击游戏《史努比泡泡》中使用ML-Agents v0.8训练机器学习代理来验证关卡,我们发现:从单实例转为到多实例后,代理的训练速度比之前快7.5倍。
本文,我们将介绍使用ML-Agents v0.9和v0.10中一些新功能,展示如何使用其让《史努比泡泡》的代理训练时间再缩减7倍。更快的训练速度不仅能够让开发过程中的迭代更加迅速,还能训练代理在游戏中做出更加复杂的行为。
Unity ML-Agents Toolkit
我们推出Unity ML-Agents Toolkit的目的是:让游戏开发者可以使用深度强化学习DRL,为玩家和非玩家角色创建复杂而有趣的行为。
深度强化学习DRL是强大而通用的工具,可用于学习各种行为,例如:实现具备物理特性的角色,完成解谜游戏。然而,深度强化学习DRL需要大量的游玩数据来学习有效的行为。对于实际游戏而言,这是限制训练提速效果的常见问题。
在ML-Agents v0.8中,加入了在单台机器上运行多个Unity游戏实例的功能,极大地提高了训练时收集训练数据的吞吐量,包括:代理的观测、动作和奖励。在与JamCity的合作中,我们训练代理来完成《史努比泡泡》的游戏关卡。在该游戏的困难关卡中,通过使用ML-Agengts v0.8中的并行环境功能,我们能够实现最高7.5倍的训练速度提升效果。
但是并行环境最多只能达到这样的效果,这是因为在一台机器上,可同时运行的Unity实例数量是有限的。为了在性能资源有限的机器上减少训练时间,我们必须找到另一种方法。
通常,有两种减少训练时间的方法:一种方法是增加每秒收集的样本数量,即增加样本吞吐量;另一种方法是减少学会有效行为所需的样本数量,即提高样本效率。
在ML-Agents v0.9版本中,我们改进了并行训练程序,实现异步收集样本,从而提高了样本数据的吞吐量。此外,我们还增加了Generative Adversarial Imitation Learning生成性对抗式模仿学习,简称GAIL,实现使用真人示范来指导学习过程,提高样本的使用效率。
在ML-Agents v0.10中,我们加入了Soft Actor-Critic柔性行动者评论家模型,简称SAC。与ML-Agents v0.8的Proximal Policy Optimization近端策略优化,简称PPO训练程序相比,该训练程序大幅提升了样本的使用效率。
在单台机器上,这些新改进又进一步将训练速度提高了7倍。因此在《史努比泡泡》中,我们不仅能够创建解决关卡的代理,还能让代理模仿人类玩家来完成游戏。
随着样本吞吐量和使用效率的提升,我们能够在一台机器上同时训练《史努比泡泡》的多个关卡,完成此前需要多台机器和几天时间才能完成的训练量。
ML-Agents Toolkit与《史努比泡泡》
了解《史努比泡泡》与ML-Agents的结合使用,请阅读:《Unity ML-Agents Toolkit v0.8:游戏训练再提速》。
与此前《史努比泡泡》的实验相比,我们在这次实验中减少了奖励,迫使代理有更接近真人玩家的行为,让代理不只是关注如何完成关卡,而是更专注于使用最少的操作清除泡泡。和仅完成关卡相比,新的目标更加困难,需要更多时间来学习合适的策略。学会这种策略的代理不止可以“通关”游戏,而且还能够完成其它目标。
下图展示了代理可以看见的内容、可执行的操作、以及获得的奖励。
《史努比泡泡》中定义的观测、动作和奖励
ML-Agents v0.8:同时运行多个《史努比泡泡》实例
在ML-Agents v0.8版本中,我们加入了同时训练多个Unity实例的功能。虽然我们在《史努比泡泡》单个实例的训练速度提升效果遇到瓶颈,但多核处理器让我们能够在单个机器上运行多个实例。由于每次游戏过程都是独立进行的,因此我们可以简单地实现并行的训练数据收集。
每个模拟环境会将数据存到一个通用训练缓冲区中,接着训练程序会使用数据来更新策略,从而在游戏中更好地表现。新的范例允许我们在不改变时间尺度等其它游戏参数的情况下,以不影响游戏机制为前提,收集更多的数据。
ML-Agents v0.9:异步环境与模仿学习
在ML-Agents v0.9中,我们分别针对样本效率和样本吞吐量推出了两项改进。
1
异步环境
在ML-Agents v0.8实现的并行环境中,每个Unity实例会与其它实例同步执行操作,而训练程序也会同时接收所有观测,然后发出所有动作指令。在部分环境下,例如:ML-Agents Toolkit中自带的环境,代理会以相同的固定频率作出决策,因此完全能够在固定步骤中执行决策。
然而在实际游戏中,部分动作可能需要更长的时间来完成。例如:在《史努比泡泡》中,清除一大堆泡泡所花的时间要比不清除泡泡更多,而且赢得游戏并重置关卡所花的时间要比发射单个泡泡要长。因此,即使只有一个并行环境执行这类耗时较长的动作,其它环境也必须等待其完成。
在ML-Agents v0.9中,我们启用了异步并行环境。只要有一个环境完成执行所有动作,训练程序便可以发出一个新动作,执行下一步操作。对于带有不同步骤时间的环境来说,该功能可以极大提升整体样本吞吐量。
2
GAIL生成性对抗式模仿学习
在一个传统的深度强化学习DRL训练过程中,代理初始化时会带有随机行为,在环境中执行随机的动作,获得奖励的概率较小。之后它会强化产生更高奖励的行为,在经过一段时间后,行为将逐渐演变为环境中奖励最多的行为,随机性也变得更低。
然而,不是所有最优行为都可以轻易通过随机行为找到。例如:某些情况下奖励可能很稀少,即代理需要执行许多正确的动作才能取得奖励。或者,环境可能有许多局部最优情况,也就是说,代理似乎可以通过执行一些步骤来实现奖励最大化,但那实际上是错误的步骤。
这两个问题都可以使用简单粗暴的随机搜索方法来解决,但这需要大量的样本来实现。这些问题也出现在了训练《史努比泡泡》代理的上百万个样本中,而有些情况下,代理可能永远找不出最佳行为。
但是,如果我们可以提供给代理真人游戏示范,引导代理向良性行为发展,情况会更好吗?该领域的研究被称作模仿学习,相应功能在ML-Agents v0.3中加入。此前,ML-Agents中模仿学习的一个缺点是它只能与强化学习分开使用,代理只能使用游戏示范进行训练,无法从环境获得奖励。
在ML-Agents v0.9中,我们基于斯坦福大学Jonathan Ho及其同事的研究成果,加入了生成性对抗式模仿学习GAIL。
了解生成性对抗式模仿学习GAIL:
https://arxiv.org/abs/1606.03476
要使用ML-Agents的模仿学习功能,我们首先要让真人玩家或机器人玩几次游戏,将观测与动作数据保存到示范文件中。训练时,代理可以照常在环境中执行动作,收集自己的观测数据。
在较高层级上,GAIL会训练第二个学习算法,即使用神经网络实现的分辨算法,用来确定特定观测或动作是来自代理,还是来自示范文件。随后,对于代理收集的每项观测数据,代理将会对比自己的结果和示范的结果,根据相似程度获得奖励。这样,代理可以学会如何最大化奖励。
分辨算法将使用代理的新观测来进行更新,更好地进行分辨。在这种迭代中,分辨算法会越来越难以分辨代理结果和示范结果,而代理也会更加擅长模仿示范结果,让分辨算法辨别不出二者的区别。
由于GAIL只会给代理提供奖励,而不会改变整个学习过程,所以我们可以使用游戏本身的奖励与GAIL的奖励,设定权重并进行相加,把GAIL和基于奖励的深度强化学习DRL结合起来。
如果我们让代理在游戏中获得奖励的数量超过GAIL的奖励数量,那么代理会在游戏中模仿真人玩家的操作,直到代理找到更大的环境奖励。
生成性对抗式模仿学习
ML-Agents v0.10:SAC柔性行动者评论家模型
在ML-Agents Toolkit最初发布时,它使用的是近端策略优化PPO(Proximal Policy Optimization)算法,该算法是来自OpenAI的稳定灵活的深度强化学习算法。
在ML-Agents v0.10中,我们发布了第二个深度强化学习DRL算法,即SAC(Soft Actor-Critic)柔性行动者评论家模型,以帮助用户更快地在实际游戏中训练代理。
SAC柔性行动者评论家模型一个关键功能是提升样本效率,它是加州大学伯克利分校的Tuomas Haarnoja及其同事的研究成果,起先是为了在真实机器人上进行学习而开发的。在游戏中,SAC让我们不必长时间运行游戏,才能够让代理学会好的策略。
深度强化学习算法基本可以分为两类:沿用既定策略的算法(On-policy)和使用新策略的算法(Off-policy)。
近端策略优化PPO这类沿用既定策略的算法会收集一定数量的样本,根据样本信息来改进和更新自己的策略。通过使用当前策略来收集样本,这类算法可以学会自行改进,提高采取容易获得奖励的动作的可能性,减少难以获得奖励的动作的可能性。
如今大部分沿用既定策略的算法,例如:近端策略优化PPO算法,也会学习一种评估函数,例如:数值估算函数,在代理处于特定状态时,计算代理直到情节结束时预期减少的奖励总量;或是Q-function函数,在代理处于特定状态执行特定行为时,计算预期减少的奖励总量。
在沿用既定策略的算法中,这些评估函数会评估使用当前策略时的一系列奖励情况。总之,这些评估结果可以帮助算法更加稳定地进行训练。
在SAC等使用新策略的算法中,工作方式稍有不同。假设环境中的动态情况和奖励函数都是固定的,在特定状态下,存在着采取特定行动与取得累积奖励的最优关系,这里的累积奖励是指最佳策略所能取得的结果。
如果我们了解这种关系,让代理学会有效策略的过程会非常简单。使用新策略的算法不必学习现有策略的效果,而是在所有策略之间找寻这种最佳关系,推导出最优评估函数。与沿用既定策略的算法相比,这种学习方法的难度更高,因为实际使用的函数可能会非常复杂。
不过由于该函数属于全局函数,我们可以使用从一开始收集的所有样本数据,帮助学习构建评估函数,让使用新策略的算法比沿用既定策略的方法有更高的样本效率。这种重新使用旧样本的方法被称为经验回放(Experience Replay),所有样本都存储在一个大型经验回放缓冲区中,该缓冲区可以存储上百次游戏的数据。
SAC原本设计用于执行持续动作的移动任务,在ML-Agents中,我们调整了原来的SAC,使它支持ML-Agents中的所有功能,包括:递归神经网络(Recurrent Neural Networks (memory)、分支化离散动作(branched discrete actions)、好奇心驱动(Curiosity)和GAIL等。
沿用既定策略的DRL VS 使用新策略的DRL
《史努比泡泡》中的性能表现结果
在此前的实验中,我们发现,在一台机器上将模拟过程从使用ML-Agents v0.7的单个环境改为使用16个并行环境后,在《史努比泡泡》的困难关卡即第25关中,训练时间速度快了7.5倍。这意味着一台机器可以在9小时内找到第25关的基本过关方法。
使用这种功能,我们继续训练并提升代理,使其更善于解决第25关,让它可以达到真人玩家的表现。精通关卡比纯粹过关所花的时间更长,平均使用的时间约33小时。
如果代理在大约1000次的操作中达到了真人玩家的表现,也就是使用与真人玩家相同或更少的泡泡数通过关卡,那么可以认为代理已经“精通”这个关卡。在第25关中,对应的平均操作次数,即平均使用的泡泡数量为25.14,这是通过21次真人玩家游戏过程计算出的平均结果。
接着,我们逐个测试了v0.9版本至v0.10版本的每项改进,测量代理在关卡中超过真人表现所需的时间。结果是,精通关卡的速度又额外提高了7倍。由于每次运行的训练时间都不同,因此这里展示的每个数值是三次运行结果的平均值。
在部分情况下,代理运气不错,可以快速找到有效的过关方法。所有训练过程都在一台16核机器上运行,配备NVIDIA TESLA K80 GPU来加速训练过程,训练期间共有16个实例并行运行。
在GAIL的实验中,我们使用了21份真人游玩数据作为示范,用来训练代理。由于《史努比泡泡》第25关中的泡泡颜色是随机生成的,因此这21次游玩示范无法覆盖所有可能的关卡情况。否则,代理可以记忆和复制真人玩家的行为,迅速学会过关方法。
随后,我们结合GAIL的奖励信号与《史努比泡泡》的奖励信号,让代理在前期能够得到GAIL的指导,在后期自行找出解决方法。
我们使用下方图表呈现加速结果。通过使用异步环境提高样本吞吐量,我们不必改变算法便可减少训练时间。然而,提高训练样本的效率则能够进一步节省更多的训练时间。
在ML-Agents v0.9版本和v0.10版本之间,样本吞吐量没有发生很大变化。使用真人示范与GAIL来指导训练后,代理达到相同训练行为所使用的样本量减少了26%,并且对应的训练时间也变得更少。
改为使用新决策SAC后,和近端策略优化PPO算法相比,代理完成关卡使用的样本量减少了81%,通过让SAC结合GAIL,我们实现了额外的提升效果。
这些提升效果不只在新奖励函数和达到真人表现目标上有效。如果我们像之前实验那样,把目标设定为纯粹为了过关,通过结合使用SAC和GAIL,我们能够使用1小时11分钟达到目标,而不是之前的8小时24分钟。
小结
本文介绍了ML-Agents不同版本的新功能与改进,以及这些改进对《史努比泡泡》中训练结果的影响,希望开发者能够喜欢这些改进。
如果你有任何建议或意见,欢迎反馈给我们:
https://github.com/Unity-Technologies/ml-agents/issues
下载Unity Connect APP,请点击此处。 观看更多Unity官方精彩视频,请关注“Unity官方”B站账户。
你可以访问Unity答疑专区留下你的问题,Unity社区和官方团队帮你解答:
Connect.unity.com/g/discussion
推荐阅读
Unity ML-Agents Toolkit v0.8:游戏训练再提速
Unity ML-Agents Toolkit v0.7:跨平台推理功能
ML-Agents Toolkit v0.6:改进大脑可用性和模仿学习
使用Unity ML-Agents Toolkit训练的可爱柯基犬Puppo
官方活动
Unity X 创想家计划
面向青少年的「Unity X 创想家计划」发布,赋予孩子开拓未来的力量,快来参加吧。[了解详情...]
直播预告|AR Foundation中国增强版介绍
11月20日星期三晚8点,新一期的Unity直播课程将帮助你了解AR Foundation中国增强版。[了解详情...]
双十一活动
Unity“双十一”活动火热进行中,来看看有哪些优惠活动吧。[了解详情...]
喜欢本文,请点击“在看”